home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chaos CD Blue
/
Chaos_CD_Blue__[1999].iso
/
congress
/
1993
/
cyber_dm
/
cbx_3d.txt
< prev
Wrap
Text File
|
1998-04-27
|
7KB
|
180 lines
Doku der internen Beschreibungs-Sprache für das Cyber-Box-Demo.
Kontakt: Institut f. Kommunikation, Christophstr. 30, 50670 Köln
bvdb@sky.gun.de
Kurzbeschreibung Visual-3D
Achtung! Dieses Demo läuft nur mit einem mathematischen Co-Prozessor.
allgemeine Struktur:
Visual-3D ist eine in C++ entwickelte Bibliothek zur Darstellung
dreidimensionaler Szenerien. Alle Objekte und der
Szenerie-Beobachter werden in Koordinatensystemen definiert, um
die räumlichen Beziehungen zueinander transparent zu gestalten.
Das Programm kann mit einer Uhr synchronisiert werden, um
Echtzeit-Anwendungen zu erlauben. Je nach Hardware können Szenen
aus einigen hundert Vektoren mit mehr als zehn Bildern pro
Sekunde dargestellt werden.
Die Funktionen der Bibliothek können in zwei Klassen unterteilt
werden:
- Definition einer Szene
- Darstellung einer Szene
Eine Szene kann entweder mit einer Script-Datei oder in einem
externen Programm-Modul definiert werden. Die dazu benötigten
Datentypen werden in den folgenden Abschnitten beschrieben. Die
wiederholte Darstellung einer Szene ist vom Standpunkt des
Benutzers trivial und besteht aus folgenden Schritten:
- Alle Objekt-Systeme ins Beobachter-System kopieren.
- Das Beobachter-System auf dem Bildschirm darstellen.
- Daten manipulieren (z.B. Bewegung des Beobachters durch Tastatureingabe)
Koordinatensysteme:
Koordinatensysteme vermitteln die raümliche Beziehung zwischen
den Objekten und dem Beobachter. Die relevanten Daten sind eine
Rotationsmatrix, ein Translationsvektor und ein Zeiger auf das
Koordinatensystem, worauf sich Rotation und Translation
beziehen. Eine Szene besteht i.A. aus einer Hierarchie von
Koordinatensystemen, z.B. Galaxie < Sonnensystem < Erde <
Hamburg < Auto < Mensch < Kopf. Dieses Feature ist besonders
nützlich, wenn sich die verschiedenen Systeme zueinander
bewegen. Durch geschickten Aufbau einer Hierarchie von
Koordinatensystemen können die Bewegungsgleichungen u. U.
erheblich vereinfacht werden. Es gibt drei verschiedene Typen
von Koordinatensysteme:
allgemeine Systeme:
Definition: system name(rel, rot, trans)
rel ist ein Zeiger auf das relative Koordinatensystem, rot die
entsprechende Rotationsmatrix und trans der Translationsvektor.
Allgemeine Systeme erhöhen die Flexibilität beim Aufbau der
Hierarchie von Koordinatensystemen.
Objekt-System:
Definition: o_system name(rel, rot, trans, P)
Alle darzustellenden 3D-Objekte müssen sich in Objekt-Systemen
befinden. Die Definition verläuft wie bei den allgemeinen
Systemen. Der zusätzliche Parameter P ist eine Zeigerliste,
deren Elemente auf die zum Objekt-System gehörenden 3D-Objekte
zeigen.
Beobachter-System:
Definition: v_system name(rel, rot, trans)
Position und Blickwinkel des Szenerie-Beobachters werden durch
Definition eines Beobachter-Systems realisiert. Die Definition
verläuft wie bei den allgemeinen Systemen. Auf die Variablen
rel, rot und trans des Beobachter-Systems greift in der Regel
eine Tastatur- Maus- oder Joystick- Funktion zu, die dem
Benutzer die Manipulation der Position und des Blickwinkels
erlaubt.
Datentypen:
Alle durch den Benutzer zu definierenden Daten werden von
Visual-3D in Form von Zeigern verwandt. Die Definition der Daten
wird entweder durch das Einlesen einer Script-Datei oder in
einem externen Programm-Modul vorgenommen. Daher können die
Daten durch externe Funktionen (Tastatur, Maus, Joystick,
serielle Schnittstelle) oder externe Programm-Module
(Flugsimulator, Planetarium, Kamerasteuerung) manipuliert
werden. Folgende Datentypen werden verwandt:
vector:
Definition: vector name(x,y,z)
Vektoren bestehen aus drei reellen Komponenten (x, y, z) und
werden zur Angabe von Positionen und Verschiebungen verwandt.
matrix:
Definition: matrix name(euler(a,b,c))
Matrizen bestehen aus neun reellen Komponenten und werden zur
Angabe von linearen Transformationen (Drehungen, Skalierungen,
...) verwandt. Zur Berechnung der Matrizen stehen Funktionen
bereit, die z.B. aus drei Euler-Winkeln die entsprechende
Rotationsmatrix berechnet.
real:
Definition: real name(x)
reelle Zahlen werden zur Angabe von Kugelradien verwandt.
color:
Definition: color name(i)
color beschreibt die Farbe von Kugeln. Die Farbe wird durch
einen Paletten-Index beschrieben.
color_array:
Definition: color_array name(i1, i2, ..., in)
Ein color-array ist eine Farb-Liste und beschreibt die Farbe von
Linien und Dreiecken. Je nach räumlicher Lage zum Beobachter
wird eine Farbe der Liste bei der Darstellung verwandt.
3D-Objekte:
Definition: object name(type,V,D)
3D-Objekte sind die zentralen Datentypen dieser Bibliothek. Alle
auf dem Bildschirm darstellbaren Objekte sind von diesem Typ.
Bei der Definition sind die folgenden drei Parameter anzugeben:
type ist einer der unten aufgezählten Grundtypen, welcher die
Art des 3D-Objekts definiert (z.B. Linie, Pyramide, Auto, ...).
V ist eine Zeiger-Liste, deren Elemente auf die zur Darstellung
benötigten Vektoren (Eckpunkte von Polygonen, Mittelpunkte von
Kugeln, ...) zeigen. D ist eine Zeiger-Liste, deren Elemente auf
die übrigen Objekt-Daten zeigen (Farben,
Transformationsparameter, Kugelradien, ...). V und D müssen
einen zum verwendeten Grundtyp passenden Inhalt aufweisen.
Grundtypen:
"sphere", V = (x,NULL), D = (r,c)
beschreibt Kugel am Punkt x mit Radius r und Farbe c.
"line", V = (x1,x2,NULL), D = (c)
beschreibt Linie vom zwischen den Punkten x1 und x2 mit
Farb-Array c.
"triangle", V = (x1,x2,x3,NULL), D = (c1,c2)
beschreibt ein Dreieck zwischen den Punkten x1, x2 und x3. Die
Vorderseite wird durch das Farb-Array c1, die Rückseite durch c2
dargestellt. Falls die Punkte x1, x2 und x3 im Uhrzeigersinn
orientiert sind ist die Vorderseite sichtbar, sonst die
Rückseite. Ist c1 oder c2 NULL, ist die entsprechende Seite
unsichtbar (sinnvoll bei der Darstellung geschlossener Körper).
"transformation", V = (NULL), D = (obj, rot, trans)
beschreibt eine um die Matrix rot gedrehte und um den Vektor
trans verschobene Kopie des 3D-Objekts obj. Bei geschickter
Verwendung dieses Typs kann die zur Darstellung einer Szene
erforderliche Datenmenge u.U. erheblich reduziert werden.
"n_macro", V, D definierbar
hiermit können eigene Typen definiert werden. Der neue Typ wird
durch eine Liste bereits definierter Typen (oder vordefinierter
Typen) mit Index-Listen auf V und D beschrieben. Das Format von
V und D wird vom Benutzer definiert. Ein Quader besteht
beispielsweise aus zwölf Dreiecken zwischen acht Eckpunkten und
sechs Farb-Listen (zwei Dreiecke und eine Farb-Liste pro Seite).
Also ist V = (x1,x2,...,x8,NULL), D = (c1,c2,c3,c4). Der Typ
Quader besteht dann aus
triangle((x1,x2,x3,NULL),(c1,NULL)),
triangle((x1,x3,x4,NULL), (c1,NULL)),
triangle((x3,x4,x5,NULL),(c2,NULL)), ...
Selbstdefinierte Typen können zur Definition weiterer Typen
verwandt werden.
"r_macro", V, D definierbar
dieser Grundtype arbeitet wie der Typ n_macro, es wird jedoch
nur ein Element der Typliste zu einer Zeit dargestellt. Welches
Element dargestellt wird, hängt von der Entfernung des Objekts
zum Beobachter ab. Mit diesem Grundtyp kann ein Objekt
entfernungsabhängig in verschiedenen Auflösungen dargestellt
werden.